package com.chart.web.controller.chart.sta;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.chart.chart.domian.ChartConfigs;
import com.chart.chart.domian.dto.ChartDateTto;
import com.chart.chart.domian.utils.ChartValidator;
import com.chart.chart.domian.vo.ChartSmartVo;
import com.chart.chart.domian.vo.ChartsVo;
import com.chart.chart.service.IChartConfigsService;
import com.chart.common.core.controller.BaseController;
import com.chart.common.core.domain.AjaxResult;
import com.chart.common.utils.ExcelDataUtils;
import com.chart.common.utils.ExcelUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.*;

/**
 * 桑基图
 *
 * @author chart
 */
@RestController
@RequestMapping("/sankey/chart")
public class SankeyChartController extends BaseController {


    @Autowired
    private IChartConfigsService chartConfigsService;


    /**
     * 桑基图
     * 垂直桑基图
     * @param chartDateTto
     * @return
     * @throws Exception
     */



    @PostMapping("/importData1")
    @Transactional
    public AjaxResult importData(@RequestBody ChartDateTto chartDateTto) throws Exception {
           // 参数校验
        String validationMessage = ChartValidator.check(chartDateTto);
        if (validationMessage != null) {
        // 返回校验失败的提示信息给前端
            return AjaxResult.error(validationMessage);
        }

        try {
            if (chartDateTto.getChartValue() != null) {
                if (chartDateTto.getConfigId() == 36 || chartDateTto.getConfigId() == 70) {

                    // 转换数据列表为工作表
                    Sheet sheet = ExcelDataUtils.convertDataListToSheetsa(chartDateTto.getDataList());
                    List<List<String>> getdata = ExcelDataUtils.getData(sheet);
                    if (CollectionUtils.isEmpty(getdata)) {
                        return AjaxResult.error("请填充数据");
                    }

                    // 检查唯一数据类别
                    Set<String> xlist = new HashSet<>();
                    List<List<Object>> dataList = new ArrayList<>();
                    for (int i = 1; i < getdata.size(); i++) {
                        List<String> list = getdata.get(i);
                        if (!CollectionUtils.isEmpty(list)) {
                            List<Object> newList = new ArrayList<>();
                            for (int i1 = 0; i1 < list.size(); i1++) {
                                String s = list.get(i1);
                                if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                                    if (i1 == 0 || i1 == 1) {
                                        xlist.add(s);
                                    }
                                    newList.add(s);
                                }
                            }
                            dataList.add(newList);
                        }
                    }

                    // 解析图表配置 JSON
                    JSONObject jsonObject = JSON.parseObject(chartDateTto.getChartValue());
                    if (jsonObject == null) {
                        return AjaxResult.error("无效的图表值 JSON");
                    }

                    // 访问 series 数组
                    JSONArray seriesArray = jsonObject.getJSONArray("series");
                    if (seriesArray == null || seriesArray.isEmpty()) {
                        return AjaxResult.error("JSON 中未找到或为空的 series 键");
                    }

                    // 获取第一个 series 对象
                    JSONObject series = seriesArray.getJSONObject(0);
                    if (series == null) {
                        return AjaxResult.error("JSON 中未找到 series 对象");
                    }

                    // 更新 series 中的 data
                    JSONArray dataArray = series.getJSONArray("data");
                    if (dataArray != null) {
                        for (int i = 0; i < dataArray.size(); i++) {
                            JSONObject dataItem = dataArray.getJSONObject(i);
                            if (!dataItem.containsKey("itemStyle") || dataItem.get("itemStyle") == null) {
                                dataItem.put("itemStyle", new HashMap<>()); // 添加默认的 itemStyle
                            }
                        }
                    }

                    // 更新 series 中的 links
                    JSONArray linksArray = series.getJSONArray("links");
                    List<JSONObject> linkList = new ArrayList<>();
                    for (List<Object> list : dataList) {
                        JSONObject newLink = new JSONObject();
                        newLink.put("source", list.get(0));
                        newLink.put("target", list.get(1));
                        newLink.put("value", list.get(2));

                        // 如果原有 links 存在对应位置的 link，则保留其 lineStyle
                        if (linksArray != null && linksArray.size() > linkList.size()) {
                            JSONObject existingLink = linksArray.getJSONObject(linkList.size());
                            if (existingLink.containsKey("lineStyle")) {
                                newLink.put("lineStyle", existingLink.get("lineStyle")); // 保留原有 lineStyle
                            } else {
                                newLink.put("lineStyle", new HashMap<>()); // 默认空 lineStyle
                            }
                        } else {
                            newLink.put("lineStyle", new HashMap<>()); // 默认空 lineStyle
                        }

                        linkList.add(newLink);
                    }
                    series.put("links", linkList);

                    // 创建新的 data 数组
                    List<Map<String, Object>> maps = new ArrayList<>();
                    for (String name : xlist) {
                        Map<String, Object> map = new HashMap<>();
                        map.put("name", name);

                        // 如果原有 data 存在 itemStyle，则保留
                        if (dataArray != null) {
                            boolean found = false;
                            for (int i = 0; i < dataArray.size(); i++) {
                                JSONObject dataItem = dataArray.getJSONObject(i);
                                if (name.equals(dataItem.getString("name")) && dataItem.containsKey("itemStyle")) {
                                    map.put("itemStyle", dataItem.get("itemStyle"));
                                    found = true;
                                    break;
                                }
                            }
                            if (!found) {
                                map.put("itemStyle", new HashMap<>());
                            }
                        } else {
                            map.put("itemStyle", new HashMap<>());
                        }
                        maps.add(map);
                    }
                    series.put("data", maps);
                    // 更新 JSON 对象中的 series
                    seriesArray.set(0, series);
                    jsonObject.put("series", seriesArray);
                    // 创建并返回结果
                    ArrayList<ChartSmartVo> newList = new ArrayList<>();
                    ChartSmartVo chartsVo = new ChartSmartVo();
                    chartsVo.setConfigValue(JSON.toJSONString(jsonObject));
                    newList.add(chartsVo);
                    return AjaxResult.success(newList);
                }
            } else {
                if (chartDateTto.getConfigId() == 36 || chartDateTto.getConfigId() == 70) {
                    Integer id = chartDateTto.getConfigId();
                    ChartConfigs chartConfigs = chartConfigsService.getById(id);
                    String configValue = chartConfigs.getConfigValue();
                    // 转换数据列表为工作表
                    Sheet sheet = ExcelDataUtils.convertDataListToSheetsa(chartDateTto.getDataList());
                    List<List<String>> getdata = ExcelDataUtils.getData(sheet);
                    if (CollectionUtils.isEmpty(getdata)) {
                        return AjaxResult.error("请填充数据");
                    }

                    // 检查唯一数据类别
                    Set<String> xlist = new HashSet<>();
                    List<List<Object>> dataList = new ArrayList<>();
                    for (int i = 1; i < getdata.size(); i++) {
                        List<String> list = getdata.get(i);
                        if (!CollectionUtils.isEmpty(list)) {
                            List<Object> newList = new ArrayList<>();
                            for (int i1 = 0; i1 < list.size(); i1++) {
                                String s = list.get(i1);
                                if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                                    if (i1 == 0 || i1 == 1) {
                                        xlist.add(s);
                                    }
                                    newList.add(s);
                                }
                            }
                            dataList.add(newList);
                        }
                    }

                    // 解析图表配置 JSON
                    JSONObject jsonObject = JSON.parseObject(configValue);
                    if (jsonObject == null) {
                        return AjaxResult.error("无效的图表值 JSON");
                    }

                    // 访问 series 数组
                    JSONArray seriesArray = jsonObject.getJSONArray("series");
                    if (seriesArray == null || seriesArray.isEmpty()) {
                        return AjaxResult.error("JSON 中未找到或为空的 series 键");
                    }

                    // 获取第一个 series 对象
                    JSONObject series = seriesArray.getJSONObject(0);
                    if (series == null) {
                        return AjaxResult.error("JSON 中未找到 series 对象");
                    }

                    // 更新 series 中的 data
                    List<Map<String, String>> maps = new ArrayList<>();
                    for (String name : xlist) {
                        Map<String, String> map = new HashMap<>();
                        map.put("name", name);
                        maps.add(map);
                    }
                    series.put("data", maps);

                    // 更新 series 中的 links
                    List<JSONObject> links = series.getJSONArray("links").toJavaList(JSONObject.class);
                    if (links == null || links.isEmpty()) {
                        return AjaxResult.error("JSON 中未找到或为空的 links 键");
                    }

                    JSONObject jsonObject1 = links.get(0);
                    List<JSONObject> linkList = new ArrayList<>();
                    for (List<Object> list : dataList) {
                        JSONObject jsonObject2 = new JSONObject(jsonObject1);
                        jsonObject2.put("source", list.get(0));
                        jsonObject2.put("target", list.get(1));
                        jsonObject2.put("value", list.get(2));
                        linkList.add(jsonObject2);
                    }
                    series.put("links", linkList);

                    // 更新 JSON 对象中的 series
                    seriesArray.set(0, series);
                    jsonObject.put("series", seriesArray);

                    // 创建并返回结果
                    ArrayList<ChartSmartVo> newList = new ArrayList<>();
                    ChartSmartVo chartsVo = new ChartSmartVo();
                    chartsVo.setConfigValue(JSON.toJSONString(jsonObject));
                    newList.add(chartsVo);
                    return AjaxResult.success(newList);

                }


            }

            return null;
        } catch (Exception e) {
            logger.error("接口importData1chartDateTto.getConfigId()={}桑基图发送异常",chartDateTto.getConfigId());
            throw new RuntimeException(e);
        }
    }





//    @PostMapping("/importData1")
//    @Transactional
//    public AjaxResult importData(@RequestBody ChartDateTto chartDateTto) throws Exception {
//        // 参数校验
//        String validationMessage = ChartValidator.check(chartDateTto);
//        if (validationMessage != null) {
//            // 返回校验失败的提示信息给前端
//            return AjaxResult.error(validationMessage);
//        }
//
//        try {
//
//            if (chartDateTto.getChartValue() != null) {
//                if (chartDateTto.getConfigId() == 36 || chartDateTto.getConfigId() == 70) {
//
//                    // 转换数据列表为工作表
//                    Sheet sheet = ExcelDataUtils.convertDataListToSheetsa(chartDateTto.getDataList());
//                    List<List<String>> getdata = ExcelDataUtils.getData(sheet);
//
//
//                    if (CollectionUtils.isEmpty(getdata)) {
//                        return AjaxResult.error("请填充数据");
//                    }
//                    // 检查唯一数据类别
//                    Set<String> xlist = new HashSet<>();
//                    List<List<Object>> dataList = new ArrayList<>();
//                    for (int i = 1; i < getdata.size(); i++) {
//                        List<String> list = getdata.get(i);
//                        if (!CollectionUtils.isEmpty(list)) {
//                            List<Object> newList = new ArrayList<>();
//                            for (int i1 = 0; i1 < list.size(); i1++) {
//                                String s = list.get(i1);
//                                if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
//                                    if (i1 == 0 || i1 == 1) {
//                                        xlist.add(s);
//                                    }
//                                    newList.add(s);
//                                }
//                            }
//                            dataList.add(newList);
//                        }
//                    }
//
//                    // 解析图表配置 JSON
//                    JSONObject jsonObject = JSON.parseObject(chartDateTto.getChartValue());
//                    if (jsonObject == null) {
//                        return AjaxResult.error("无效的图表值 JSON");
//                    }
//
//                    // 访问 series 数组
//                    JSONArray seriesArray = jsonObject.getJSONArray("series");
//                    if (seriesArray == null || seriesArray.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 series 键");
//                    }
//
//                    // 遍历 series 数组中的每个元素
//                    for (int i = 0; i < seriesArray.size(); i++) {
//                        JSONObject series = seriesArray.getJSONObject(i);
//                        if (series == null) {
//                            continue;
//                        }
//
//                        // 更新 series 中的 data
//                        List<Map<String, Object>> maps = new ArrayList<>();
//                        JSONArray dataArray = series.getJSONArray("data");
//                        if (dataArray != null && !dataArray.isEmpty()) {
//                            for (int j = 0; j < dataArray.size(); j++) {
//                                JSONObject dataObj = dataArray.getJSONObject(j);
//                                Map<String, Object> map = new HashMap<>();
//                                map.put("name", dataObj.getString("name"));
//                                // 确保每个 data 对象都有 itemStyle 字段
//                                if (dataObj.containsKey("itemStyle")) {
//                                    map.put("itemStyle", dataObj.getJSONObject("itemStyle"));
//                                } else {
//                                    map.put("itemStyle", new JSONObject());
//                                }
//                                // 确保每个 data 对象都有 label 字段
//                                if (dataObj.containsKey("label")) {
//                                    map.put("label", dataObj.getJSONObject("label"));
//                                } else {
//                                    map.put("label", new JSONObject());
//                                }
//                                maps.add(map);
//                            }
//                        } else {
//                            for (String name : xlist) {
//                                Map<String, Object> map = new HashMap<>();
//                                map.put("name", name);
//                                // 确保每个 data 对象都有 itemStyle 字段
//                                map.put("itemStyle", new JSONObject());
//                                // 确保每个 data 对象都有 label 字段
//                                map.put("label", new JSONObject());
//                                maps.add(map);
//                            }
//                        }
//                        series.put("data", maps);
//
//                        // 更新 series 中的 links
//                        JSONArray linksArray = series.getJSONArray("links");
//                        if (linksArray == null || linksArray.isEmpty()) {
//                            return AjaxResult.error("JSON 中未找到或为空的 links 键");
//                        }
//
//                        List<JSONObject> linkList = new ArrayList<>();
//                        for (List<Object> list : dataList) {
//                            JSONObject link = new JSONObject();
//                            link.put("source", list.get(0));
//                            link.put("target", list.get(1));
//                            link.put("value", list.get(2));
//                            // 确保每个 link 对象都有 lineStyle 字段
//                            boolean found = false;
//                            for (int j = 0; j < linksArray.size(); j++) {
//                                JSONObject existingLink = linksArray.getJSONObject(j);
//                                if (existingLink.getString("source").equals(list.get(0)) && existingLink.getString("target").equals(list.get(1))) {
//                                    if (existingLink.containsKey("lineStyle")) {
//                                        link.put("lineStyle", existingLink.getJSONObject("lineStyle"));
//                                    } else {
//                                        link.put("lineStyle", new JSONObject());
//                                    }
//                                    found = true;
//                                    break;
//                                }
//                            }
//                            if (!found) {
//                                link.put("lineStyle", new JSONObject());
//                            }
//                            linkList.add(link);
//                        }
//                        series.put("links", linkList);
//
//                        // 更新 series 数组
//                        seriesArray.set(i, series);
//                    }
//
//                    // 更新 JSON 对象中的 series
//                    jsonObject.put("series", seriesArray);
//
//
//                    for (List<String> getdatum : getdata) {
//                        System.out.println("我是数组数据"+getdatum);
//                    }
//
//
//                    // 创建并返回结果
//                    ArrayList<ChartSmartVo> newList = new ArrayList<>();
//                    ChartSmartVo chartsVo = new ChartSmartVo();
//                    chartsVo.setConfigValue(JSON.toJSONString(jsonObject));
//                    newList.add(chartsVo);
//                    return AjaxResult.success(newList);
//                }
//
//
//            } else {
//                if (chartDateTto.getConfigId() == 36 || chartDateTto.getConfigId() == 70) {
//                    Integer id = chartDateTto.getConfigId();
//                    ChartConfigs chartConfigs = chartConfigsService.getById(id);
//                    String configValue = chartConfigs.getConfigValue();
//                    // 转换数据列表为工作表
//                    Sheet sheet = ExcelDataUtils.convertDataListToSheetsa(chartDateTto.getDataList());
//                    List<List<String>> getdata = ExcelDataUtils.getData(sheet);
//                    if (CollectionUtils.isEmpty(getdata)) {
//                        return AjaxResult.error("请填充数据");
//                    }
//
//                    // 检查唯一数据类别
//                    Set<String> xlist = new HashSet<>();
//                    List<List<Object>> dataList = new ArrayList<>();
//                    for (int i = 1; i < getdata.size(); i++) {
//                        List<String> list = getdata.get(i);
//                        if (!CollectionUtils.isEmpty(list)) {
//                            List<Object> newList = new ArrayList<>();
//                            for (int i1 = 0; i1 < list.size(); i1++) {
//                                String s = list.get(i1);
//                                if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
//                                    if (i1 == 0 || i1 == 1) {
//                                        xlist.add(s);
//                                    }
//                                    newList.add(s);
//                                }
//                            }
//                            dataList.add(newList);
//                        }
//                    }
//
//                    // 解析图表配置 JSON
//                    JSONObject jsonObject = JSON.parseObject(configValue);
//                    if (jsonObject == null) {
//                        return AjaxResult.error("无效的图表值 JSON");
//                    }
//
//                    // 访问 series 数组
//                    JSONArray seriesArray = jsonObject.getJSONArray("series");
//                    if (seriesArray == null || seriesArray.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 series 键");
//                    }
//
//                    // 获取第一个 series 对象
//                    JSONObject series = seriesArray.getJSONObject(0);
//                    if (series == null) {
//                        return AjaxResult.error("JSON 中未找到 series 对象");
//                    }
//
//                    // 更新 series 中的 data
//                    List<Map<String, String>> maps = new ArrayList<>();
//                    for (String name : xlist) {
//                        Map<String, String> map = new HashMap<>();
//                        map.put("name", name);
//                        maps.add(map);
//                    }
//                    series.put("data", maps);
//
//                    // 更新 series 中的 links
//                    List<JSONObject> links = series.getJSONArray("links").toJavaList(JSONObject.class);
//                    if (links == null || links.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 links 键");
//                    }
//
//                    JSONObject jsonObject1 = links.get(0);
//                    List<JSONObject> linkList = new ArrayList<>();
//                    for (List<Object> list : dataList) {
//                        JSONObject jsonObject2 = new JSONObject(jsonObject1);
//                        jsonObject2.put("source", list.get(0));
//                        jsonObject2.put("target", list.get(1));
//                        jsonObject2.put("value", list.get(2));
//                        linkList.add(jsonObject2);
//                    }
//                    series.put("links", linkList);
//
//                    // 更新 JSON 对象中的 series
//                    seriesArray.set(0, series);
//                    jsonObject.put("series", seriesArray);
//
//                    // 创建并返回结果
//                    ArrayList<ChartSmartVo> newList = new ArrayList<>();
//                    ChartSmartVo chartsVo = new ChartSmartVo();
//                    chartsVo.setConfigValue(JSON.toJSONString(jsonObject));
//                    newList.add(chartsVo);
//                    return AjaxResult.success(newList);
//
//                }
//
//
//            }
//
//            return null;
//        } catch (Exception e) {
//            logger.error("接口importData1chartDateTto.getConfigId()={}桑基图发送异常", chartDateTto.getConfigId());
//            throw new RuntimeException(e);
//        }
//    }


    /**
     * 桑基图
     * 垂直桑基图
     *
     * @param
     * @return
     * @throws Exception
     */

//   @PostMapping("/importData1")
//    @Transactional
//    public AjaxResult importData(@RequestBody ChartDateTto chartDateTto) throws Exception {
//// 参数校验
//        String validationMessage = ChartValidator.check(chartDateTto);
//        if (validationMessage != null) {
//// 返回校验失败的提示信息给前端
//            return AjaxResult.error(validationMessage);
//        }
//
//        try {
//            if (chartDateTto.getChartValue() != null) {
//                if (chartDateTto.getConfigId() == 36 || chartDateTto.getConfigId() == 70) {
//
//                    // 转换数据列表为工作表
//                    Sheet sheet = ExcelDataUtils.convertDataListToSheetsa(chartDateTto.getDataList());
//                    List<List<String>> getdata = ExcelDataUtils.getData(sheet);
//                    if (CollectionUtils.isEmpty(getdata)) {
//                        return AjaxResult.error("请填充数据");
//                    }
//
//                    // 检查唯一数据类别
//                    Set<String> xlist = new HashSet<>();
//                    List<List<Object>> dataList = new ArrayList<>();
//                    for (int i = 1; i < getdata.size(); i++) {
//                        List<String> list = getdata.get(i);
//                        if (!CollectionUtils.isEmpty(list)) {
//                            List<Object> newList = new ArrayList<>();
//                            for (int i1 = 0; i1 < list.size(); i1++) {
//                                String s = list.get(i1);
//                                if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
//                                    if (i1 == 0 || i1 == 1) {
//                                        xlist.add(s);
//                                    }
//                                    newList.add(s);
//                                }
//                            }
//                            dataList.add(newList);
//                        }
//                    }
//
//                    // 解析图表配置 JSON
//                    JSONObject jsonObject = JSON.parseObject(chartDateTto.getChartValue());
//                    if (jsonObject == null) {
//                        return AjaxResult.error("无效的图表值 JSON");
//                    }
//
//                    // 访问 series 数组
//                    JSONArray seriesArray = jsonObject.getJSONArray("series");
//                    if (seriesArray == null || seriesArray.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 series 键");
//                    }
//
//                    // 获取第一个 series 对象
//                    JSONObject series = seriesArray.getJSONObject(0);
//                    if (series == null) {
//                        return AjaxResult.error("JSON 中未找到 series 对象");
//                    }
//
//                    // 更新 series 中的 data
//                    List<Map<String, String>> maps = new ArrayList<>();
//                    for (String name : xlist) {
//                        Map<String, String> map = new HashMap<>();
//                        map.put("name", name);
//                        maps.add(map);
//                    }
//                    series.put("data", maps);
//
//                    // 更新 series 中的 links
//                    List<JSONObject> links = series.getJSONArray("links").toJavaList(JSONObject.class);
//                    if (links == null || links.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 links 键");
//                    }
//
//                    JSONObject jsonObject1 = links.get(0);
//                    List<JSONObject> linkList = new ArrayList<>();
//                    for (List<Object> list : dataList) {
//                        JSONObject jsonObject2 = new JSONObject(jsonObject1);
//                        jsonObject2.put("source", list.get(0));
//                        jsonObject2.put("target", list.get(1));
//                        jsonObject2.put("value", list.get(2));
//                        linkList.add(jsonObject2);
//                    }
//                    series.put("links", linkList);
//
//                    // 更新 JSON 对象中的 series
//                    seriesArray.set(0, series);
//                    jsonObject.put("series", seriesArray);
//
//                    // 创建并返回结果
//                    ArrayList<ChartSmartVo> newList = new ArrayList<>();
//                    ChartSmartVo chartsVo = new ChartSmartVo();
//                    chartsVo.setConfigValue(JSON.toJSONString(jsonObject));
//                    newList.add(chartsVo);
//                    return AjaxResult.success(newList);
//
//                }
//
//            } else {
//                if (chartDateTto.getConfigId() == 36 || chartDateTto.getConfigId() == 70) {
//                    Integer id = chartDateTto.getConfigId();
//                    ChartConfigs chartConfigs = chartConfigsService.getById(id);
//                    String configValue = chartConfigs.getConfigValue();
//                    // 转换数据列表为工作表
//                    Sheet sheet = ExcelDataUtils.convertDataListToSheetsa(chartDateTto.getDataList());
//                    List<List<String>> getdata = ExcelDataUtils.getData(sheet);
//                    if (CollectionUtils.isEmpty(getdata)) {
//                        return AjaxResult.error("请填充数据");
//                    }
//
//                    // 检查唯一数据类别
//                    Set<String> xlist = new HashSet<>();
//                    List<List<Object>> dataList = new ArrayList<>();
//                    for (int i = 1; i < getdata.size(); i++) {
//                        List<String> list = getdata.get(i);
//                        if (!CollectionUtils.isEmpty(list)) {
//                            List<Object> newList = new ArrayList<>();
//                            for (int i1 = 0; i1 < list.size(); i1++) {
//                                String s = list.get(i1);
//                                if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
//                                    if (i1 == 0 || i1 == 1) {
//                                        xlist.add(s);
//                                    }
//                                    newList.add(s);
//                                }
//                            }
//                            dataList.add(newList);
//                        }
//                    }
//
//                    // 解析图表配置 JSON
//                    JSONObject jsonObject = JSON.parseObject(configValue);
//                    if (jsonObject == null) {
//                        return AjaxResult.error("无效的图表值 JSON");
//                    }
//
//                    // 访问 series 数组
//                    JSONArray seriesArray = jsonObject.getJSONArray("series");
//                    if (seriesArray == null || seriesArray.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 series 键");
//                    }
//
//                    // 获取第一个 series 对象
//                    JSONObject series = seriesArray.getJSONObject(0);
//                    if (series == null) {
//                        return AjaxResult.error("JSON 中未找到 series 对象");
//                    }
//
//                    // 更新 series 中的 data
//                    List<Map<String, String>> maps = new ArrayList<>();
//                    for (String name : xlist) {
//                        Map<String, String> map = new HashMap<>();
//                        map.put("name", name);
//                        maps.add(map);
//                    }
//                    series.put("data", maps);
//
//                    // 更新 series 中的 links
//                    List<JSONObject> links = series.getJSONArray("links").toJavaList(JSONObject.class);
//                    if (links == null || links.isEmpty()) {
//                        return AjaxResult.error("JSON 中未找到或为空的 links 键");
//                    }
//
//                    JSONObject jsonObject1 = links.get(0);
//                    List<JSONObject> linkList = new ArrayList<>();
//                    for (List<Object> list : dataList) {
//                        JSONObject jsonObject2 = new JSONObject(jsonObject1);
//                        jsonObject2.put("source", list.get(0));
//                        jsonObject2.put("target", list.get(1));
//                        jsonObject2.put("value", list.get(2));
//                        linkList.add(jsonObject2);
//                    }
//                    series.put("links", linkList);
//
//                    // 更新 JSON 对象中的 series
//                    seriesArray.set(0, series);
//                    jsonObject.put("series", seriesArray);
//
//                    // 创建并返回结果
//                    ArrayList<ChartSmartVo> newList = new ArrayList<>();
//                    ChartSmartVo chartsVo = new ChartSmartVo();
//                    chartsVo.setConfigValue(JSON.toJSONString(jsonObject));
//                    newList.add(chartsVo);
//                    return AjaxResult.success(newList);
//
//                }
//
//
//            }
//
//            return null;
//        } catch (Exception e) {
//            logger.error("接口importData1chartDateTto.getConfigId()={}桑基图发送异常",chartDateTto.getConfigId());
//            throw new RuntimeException(e);
//        }
//    }
//






    @PostMapping("v2/importData1")
    public AjaxResult v2importData(@RequestBody List<Map<String, Object>> dataLists, Long configId) throws Exception {

        // XSSFWorkbook workbook = null;
        try {
            // Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            Sheet sheet = ExcelUtils.convertDataListToSheets(dataLists);
      /*      workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            System.out.println(getdata);
            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }


            //数据的种类不能重复
            Set<String> xlist = new HashSet<>();
            List<List<Object>> dataList = new ArrayList<>();
            for (int i = 1; i < getdata.size(); i++) {
                List<String> list = getdata.get(i);
                if (!CollectionUtils.isEmpty(list)) {
                    List<Object> newList = new ArrayList<>();
                    for (int i1 = 0; i1 < list.size(); i1++) {
                        String s = list.get(i1);
                        if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                            if (i1 == 0 || i1 == 1) {
                                xlist.add(s);
                            }
                            newList.add(s);
                        }
                    }
                    dataList.add(newList);
                }
            }


            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            List<Map> maps = new ArrayList<>();
            JSONObject series = (JSONObject) jsonObject.get("series");

            Iterator<String> iterator = xlist.iterator();
            while (iterator.hasNext()) {
                Map map = new HashMap<>();
                map.put("name", iterator.next());
                maps.add(map);
            }

            series.put("data", maps);

            List<JSONObject> links = (List<JSONObject>) series.get("links");
            JSONObject jsonObject1 = links.get(0);

            List<JSONObject> linkList = new ArrayList<>();
            for (int i = 0; i < dataList.size(); i++) {
                List<Object> list = dataList.get(i);

                JSONObject jsonObject2 = new JSONObject();
                jsonObject2.putAll(jsonObject1);

                jsonObject2.put("source", list.get(0));
                jsonObject2.put("target", list.get(1));
                jsonObject2.put("value", list.get(2));

                linkList.add(jsonObject2);
            }
            series.put("links", linkList);

            jsonObject.put("series", series);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            //workbook.close();
        }
    }
}
